package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

/**
 * @author By ZengPeng
 */
public class 力扣_125_验证回文串 {
    //测试
    public static void main(String[] args) {
//        System.out.println((int)'0');
//        System.out.println((int)'9');
//        System.out.println((int)'A');//65
//        System.out.println((int)'a');//97
        System.out.println((int)'Z'); //90
//        System.out.println((int)'z'); //122
//        System.out.println((int)'@');//64
        System.out.println((int)'_');//64
//        System.out.println(new 力扣_125_验证回文串().isPalindrome("A man, a plan, a canal: Panama"));
//        System.out.println(new 力扣_125_验证回文串().isPalindrome("race a car"));
//        System.out.println(new 力扣_125_验证回文串().isPalindrome("0P"));
//        System.out.println(new 力扣_125_验证回文串().isPalindrome("ab@a"));
        System.out.println(new 力扣_125_验证回文串().isPalindrome("ab_a"));
    }

    /**
     * 题目：给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
     * 说明：本题中，我们将空字符串定义为有效的回文串。
     *
     * 示例 1:
     * 输入: "A man, a plan, a canal: Panama"
     * 输出: true
     * 解释："amanaplanacanalpanama" 是回文串
     *
     * 分析：
     *      1.while 遍历 ，左右节点向中间靠近
     *      2.过程判断： 为"" 跳过移动
     *      3.终止条件： left >=  right
     *
     * 边界值注意：
     *      0.去除非 a-z  ，A-Z 的字符串
     *      1.只有一个字符串 ，直接return true;
     *      2.left == right   如： " a" ,不用进来
     **/
    public boolean isPalindrome(String s) {
        int left = 0, right =s.length()-1;
        char lc, rc;
        while (left<right){
            lc = s.charAt(left);
            rc= s.charAt(right);
            if(lc<48 ||( lc > 57 && lc< 65)||( lc > 90 && lc< 97)|| lc>122){//不是字母,跳过
                left++;continue;
            }
            if(rc<48 ||( rc > 57 && rc< 65)||( rc > 90 && rc< 97)|| rc>122){//不是字母,跳过
                right--;continue;
            }
            int abs = Math.abs(lc - rc);
            if( abs==0  || (abs==32 && lc>64 && rc>64)){
                left++;right--;
            }else
                return false;
        }
        return  true;
    }
}
